contents
벡터 검색은 정확한 키워드 일치를 찾는 대신, 의미와 문맥을 기반으로 쿼리와 가장 유사한 항목을 찾는 정보 검색 방법입니다. 이는 "시맨틱 검색", 추천 엔진, 현대 AI 애플리케이션을 구동하는 핵심 기술입니다.
그 강력함을 이해하려면 먼저 기존 검색 방식의 한계를 생각해봐야 합니다.
-
키워드 검색: 문자 그대로의 텍스트를 매칭합니다. 만약 "정글의 똑똑한 왕"을 검색하면, 정확히 그 단어들을 포함한 문서를 찾습니다. "사자의 지능"이라는 제목의 글은 찾지 못할 것입니다.
-
벡터 검색: _의미_를 이해합니다. "똑똑한"이 "지능"과 개념적으로 가깝고, "정글의 왕"이 "사자"를 지칭하는 일반적인 방법임을 압니다. 따라서 사자에 대한 글을 쉽게 찾아낼 것입니다.
작동 원리: 세 가지 핵심 단계
벡터 검색은 임베딩, 인덱싱, 쿼리의 세 단계로 이루어집니다.
1단계: 임베딩 (모든 것을 숫자로 변환하기) 🧠
벡터 검색의 마법은 임베딩에서 시작됩니다. 임베딩은 텍스트, 이미지, 오디오와 같은 데이터를 벡터(숫자 목록) 형태로 변환한 수치적 표현입니다.
-
정의: 임베딩 모델(BERT나 CLIP과 같은 신경망의 일종)은 방대한 데이터셋으로 학습하여 개념 간의 관계를 배웁니다. 그런 다음 어떤 데이터 조각이든 고차원 벡터로 변환합니다.
-
핵심 아이디어: 유사한 항목들은 이 고차원의 "벡터 공간"에서 서로 가까운 벡터로 매핑됩니다.
-
비유: 거대한 보이지 않는 '의미의 지도'를 상상해 보세요. 임베딩 모델은 모든 개념을 이 지도 위에 배치합니다. "강아지"라는 단어는 "새끼 강아지"나 "개과 동물"과 매우 가까운 곳에 배치될 것입니다. "왕"은 "통치자"나 "군주" 근처에 있을 것입니다.
이는 강력한 수학적 관계를 만들어냅니다. 고전적인 예로 "왕" 벡터에서 "남자" 벡터를 빼고 "여자" 벡터를 더하면 "여왕" 벡터와 매우 가까운 벡터가 나옵니다.
벡터("왕") - 벡터("남자") + 벡터("여자") ≈ 벡터("여왕")
따라서 첫 번째 단계는 모든 데이터(모든 기사, 제품 설명 또는 이미지)를 이러한 벡터 임베딩으로 변환하여 저장하는 것입니다.
2단계: 인덱싱 (검색 가능한 지도 만들기) 🗺️
이제 수백만 개의 벡터가 있습니다. 사용자가 쿼리를 입력했을 때, 가장 가까운 벡터들을 어떻게 찾을 수 있을까요?
쿼리 벡터를 데이터베이스의 _모든 다른 벡터_와 일일이 비교하는 단순한 접근법(전수 조사 또는 "정확한 최근접 이웃" 검색)은 너무 느립니다.
이때 근사 근접 이웃(Approximate Nearest Neighbor, ANN) 알고리즘이 사용됩니다. ANN 인덱스는 매우 빠른 검색을 가능하게 하는 방식으로 벡터들을 구성하는 특별한 데이터 구조입니다.
-
트레이드오프: 이름에서 알 수 있듯이, ANN은 약간의 정확도를 희생하는 대신 엄청난 속도 향상을 얻습니다. 100%의 확률로 절대적으로 가장 가까운 벡터를 찾지는 못할 수도 있지만, 수천 배 더 빠른 속도로 매우, 매우 가까운 벡터를 (예: 99.9%의 확률로) 찾아냅니다.
-
일반적인 ANN 알고리즘:
-
HNSW (Hierarchical Navigable Small World): 가장 인기 있고 효과적인 방법입니다. 지역 도로와 고속도로가 있는 고속도로 시스템처럼 다계층 그래프를 구축하여, 상세 검색을 수행하기 전에 올바른 벡터 군집으로 빠르게 이동할 수 있게 합니다.
-
IVF (Inverted File Index): 이 방법은 먼저 벡터를 클러스터로 그룹화합니다. 쿼리가 들어오면, 쿼리 벡터와 가장 가까운 몇 개의 클러스터 내에서만 검색하고 나머지는 무시합니다.
-
이 인덱싱 과정은 보통 Pinecone, Weaviate, Milvus와 같은 전문 벡터 데이터베이스나 PostgreSQL( pgvector 확장 기능 사용)과 같은 기존 데이터베이스의 기능에 의해 처리됩니다.
3단계: 쿼리 (가장 가까운 이웃 찾기) 🔍
여기서 모든 것이 합쳐집니다.
-
쿼리 임베딩: 사용자의 검색 쿼리(예: "지능적인 사자"라는 텍스트 또는 업로드된 운동화 이미지)가 동일한 임베딩 모델을 통해 쿼리 벡터로 변환됩니다.
-
인덱스 검색: 시스템은 ANN 인덱스를 사용하여 데이터베이스에서 쿼리 벡터와 "가장 가까운"
k개의 벡터를 찾습니다. -
"유사도" 측정: "유사도"는 거리 측정법을 사용하여 계산됩니다. 가장 일반적인 두 가지는 다음과 같습니다.
-
코사인 유사도 (Cosine Similarity): 두 벡터 사이의 각도를 측정합니다. 각도가 작을수록 유사도가 높습니다. 크기와 상관없이 개념적 유사성을 이해하는 데 좋습니다.
-
유클리드 거리 (Euclidean Distance): 두 벡터의 점 사이의 직선 거리를 측정합니다. 크기가 중요할 때 유용합니다.
-
-
결과 반환: 시스템은 가장 가까운 벡터에 해당하는 원본 항목(텍스트, 이미지 등)을 가져와 유사도 순으로 정렬하여 사용자에게 반환합니다.
일반적인 사용 사례
-
시맨틱 검색: 키워드가 아닌 사용자 의도를 이해하는 검색창을 구동합니다.
-
추천 엔진: "이 상품을 좋아한 사용자는 다음 상품도 좋아했습니다..."는 현재 보고 있는 상품의 벡터와 가장 가까운 상품들의 벡터를 찾아 구현됩니다.
-
이미지 검색: 이미지를 사용하여 시각적으로 유사한 이미지를 검색합니다 (역 이미지 검색).
-
검색 증강 생성 (RAG): 이는 LLM을 위한 핵심 기술입니다. 챗봇에게 최근 사건에 대해 질문하면, 벡터 검색을 사용하여 지식 베이스에서 관련 기사를 찾고 그 텍스트를 LLM의 컨텍스트 창에 넣어 정확하고 최신 답변을 생성합니다.
-
이상 탐지: 어떤 클러스터에서도 멀리 떨어진 벡터를 가진 데이터 포인트를 찾아내어 비정상적인 데이터임을 나타냅니다.
references